home *** CD-ROM | disk | FTP | other *** search
/ PC Master 5 / PC MASTER 5.iso / INTERNET / KIT / WIN95 / MSIE30.EXE / ieakjava.exe / classr.exe / com / ms / awt / GraphicsX.class (.txt) < prev    next >
Encoding:
Java Class File  |  1997-01-31  |  5.1 KB  |  345 lines

  1. package com.ms.awt;
  2.  
  3. import java.awt.Font;
  4. import java.awt.FontMetrics;
  5. import java.awt.Graphics;
  6. import java.awt.Point;
  7. import sun.awt.win32.MComponentPeer;
  8. import sun.awt.win32.Win32Graphics;
  9. import sun.awt.win32.Win32Image;
  10. import sun.awt.win32.Win32PrintJob;
  11.  
  12. public class GraphicsX extends Win32Graphics {
  13.    private final int TTPOLYHEADER = 16;
  14.    // $FF: renamed from: go com.ms.awt.GlyphOutline[]
  15.    private GlyphOutline[] field_0;
  16.    private int bPos;
  17.  
  18.    public GraphicsX(Win32Image var1) {
  19.       super(var1);
  20.    }
  21.  
  22.    public void drawString(String var1, int var2, int var3) {
  23.       FontX var4 = this.getFontX(8);
  24.       if (var4 == null) {
  25.          super.drawString(var1, var2, var3);
  26.       } else {
  27.          this.drawStringWidth(var1, var2, var3);
  28.       }
  29.  
  30.    }
  31.  
  32.    int getSizeGlyphInt() {
  33.       return 4;
  34.    }
  35.  
  36.    int getGlyphInt(byte[] var1) {
  37.       int var2 = (var1[this.bPos] & 255) + (var1[this.bPos + 1] & 255) * 256 + ((var1[this.bPos + 2] & 255) + (var1[this.bPos + 3] & 255) * 256) * 65536;
  38.       this.bPos += this.getSizeGlyphInt();
  39.       return var2;
  40.    }
  41.  
  42.    Point getGlyphPoint(byte[] var1) {
  43.       int var2 = this.getGlyphInt(var1);
  44.       int var3 = this.getGlyphInt(var1);
  45.       return new Point(var2, var3);
  46.    }
  47.  
  48.    int getSizeGlyphFloat(byte[] var1) {
  49.       return this.getSizeGlyphInt();
  50.    }
  51.  
  52.    private GlyphOutline getGlyphOutline1(char var1) {
  53.       byte[] var4 = this.getCharOutline(var1);
  54.       if (var4 == null) {
  55.          return null;
  56.       } else {
  57.          int var5 = var4.length;
  58.          this.bPos = 0;
  59.          GlyphOutline var6 = new GlyphOutline();
  60.          GlyphMetrics var7 = new GlyphMetrics();
  61.          var7.blackBoxX = this.getGlyphInt(var4);
  62.          var7.blackBoxY = this.getGlyphInt(var4);
  63.          var7.glyphOrigin = this.getGlyphPoint(var4);
  64.          var7.cellIncX = this.getGlyphShort(var4);
  65.          var7.cellIncY = this.getGlyphShort(var4);
  66.          var6.gm = var7;
  67.          int var8 = var5 - this.bPos;
  68.          int var9 = 0;
  69.  
  70.          int var2;
  71.          int var3;
  72.          for(var2 = this.bPos; var8 != 0; this.bPos += var3 - this.getSizeGlyphInt()) {
  73.             ++var9;
  74.             var3 = this.getGlyphInt(var4);
  75.             var8 -= var3;
  76.          }
  77.  
  78.          var6.polygons = new OutlinePolygon[var9];
  79.  
  80.          for(int var10 = 0; var10 < var9; ++var10) {
  81.             this.bPos = var2;
  82.             int var11 = this.getGlyphInt(var4);
  83.             var3 = var11 - 16;
  84.             OutlinePolygon var12 = new OutlinePolygon(1);
  85.             var6.polygons[var10] = var12;
  86.             var12.type = this.getGlyphInt(var4) == 24 ? 1 : 0;
  87.             var12.fxStart = this.getGlyphPointFx(var4);
  88.  
  89.             int var13;
  90.             for(var13 = 0; var3 > 0; ++var13) {
  91.                this.getGlyphShort(var4);
  92.                int var14 = this.getGlyphShort(var4);
  93.                int var15 = this.getSizeGlyphPointFx(var4) * var14;
  94.                this.bPos += var15;
  95.                var3 -= var15 + 4;
  96.             }
  97.  
  98.             var12.curves = new OutlineCurve[var13];
  99.             this.bPos = var2 + 16;
  100.  
  101.             for(int var21 = 0; var21 < var13; ++var21) {
  102.                OutlineCurve var22 = new OutlineCurve();
  103.                var12.curves[var21] = var22;
  104.                int var16 = this.getGlyphShort(var4);
  105.                var22.type = var16;
  106.                if (var16 != 1 && var16 != 2) {
  107.                   System.out.println("Error in parsing OutlinePolygon!");
  108.                   return null;
  109.                }
  110.  
  111.                int var17 = this.getGlyphShort(var4);
  112.                var22.points = new PointFx[var17];
  113.  
  114.                for(int var18 = 0; var18 < var17; ++var18) {
  115.                   var22.points[var18] = this.getGlyphPointFx(var4);
  116.                }
  117.             }
  118.  
  119.             var2 += var11;
  120.          }
  121.  
  122.          return var6;
  123.       }
  124.    }
  125.  
  126.    public void drawOutlinePolygon(int var1, int var2, OutlinePolygon var3) {
  127.       PointFx var4 = var3.fxStart;
  128.       int var5 = var3.curves.length;
  129.       PointFx var6 = new PointFx();
  130.  
  131.       for(int var7 = 0; var7 < var5; ++var7) {
  132.          OutlineCurve var8 = var3.curves[var7];
  133.          int var9 = var8.points.length;
  134.          if (var8.type == 1) {
  135.             for(int var15 = 0; var15 < var9; ++var15) {
  136.                PointFx var16 = var8.points[var15];
  137.                ((Win32Graphics)this).drawLine(var1 + (int)var4.x, var2 - (int)var4.y, var1 + (int)var16.x, var2 - (int)var16.y);
  138.                var4 = var16;
  139.             }
  140.          } else if (var8.type == 2) {
  141.             if (var3.type == 2) {
  142.                this.pDrawBezier(var1, var2, var4, var8, var9);
  143.             } else {
  144.                if (var3.type != 1) {
  145.                   System.out.println("Error! Unknown polygon type");
  146.                   return;
  147.                }
  148.  
  149.                PointFx var10 = var4;
  150.  
  151.                for(int var13 = 0; var13 < var9 - 1; ++var13) {
  152.                   PointFx var11 = var8.points[var13];
  153.                   PointFx var12;
  154.                   if (var13 < var9 - 2) {
  155.                      var6.x = (var11.x + var8.points[var13 + 1].x) / 2.0F;
  156.                      var6.y = (var11.y + var8.points[var13 + 1].y) / 2.0F;
  157.                      var12 = var6;
  158.                   } else {
  159.                      var12 = var8.points[var13 + 1];
  160.                   }
  161.  
  162.                   this.drawT2Curve(var10, var11, var12, var1, var2);
  163.                   var10 = var12;
  164.                }
  165.             }
  166.  
  167.             var4 = var8.points[var9 - 1];
  168.          }
  169.       }
  170.  
  171.       if (var3.fxStart.x != var4.x || var3.fxStart.y != var4.y) {
  172.          ((Win32Graphics)this).drawLine(var1 + (int)var4.x, var2 - (int)var4.y, var1 + (int)var3.fxStart.x, var2 - (int)var3.fxStart.y);
  173.       }
  174.  
  175.    }
  176.  
  177.    PointFx getGlyphPointFx(byte[] var1) {
  178.       float var2 = this.getGlyphFloat(var1);
  179.       float var3 = this.getGlyphFloat(var1);
  180.       return new PointFx(var2, var3);
  181.    }
  182.  
  183.    private FontX getFontX(int var1) {
  184.       Font var2 = ((Win32Graphics)this).getFont();
  185.       if (var2 instanceof FontX) {
  186.          FontX var3 = (FontX)var2;
  187.          if (var1 == 0) {
  188.             return var3;
  189.          }
  190.  
  191.          if ((var3.getFlags() & var1) != 0) {
  192.             return var3;
  193.          }
  194.       }
  195.  
  196.       return null;
  197.    }
  198.  
  199.    public int gethdc() {
  200.       return ((Win32Graphics)this).GetDC();
  201.    }
  202.  
  203.    private void drawT2Curve(PointFx var1, PointFx var2, PointFx var3, int var4, int var5) {
  204.       double var10 = (double)(var1.x - 2.0F * var2.x + var3.x);
  205.       double var12 = (double)(2.0F * var2.x - 2.0F * var1.x);
  206.       double var14 = (double)var1.x;
  207.       double var16 = (double)(var1.y - 2.0F * var2.y + var3.y);
  208.       double var18 = (double)(2.0F * var2.y - 2.0F * var1.y);
  209.       double var20 = (double)var1.y;
  210.       int var8 = var4 + (int)var14;
  211.       int var9 = var5 - (int)var20;
  212.  
  213.       for(double var22 = (double)0.0F; var22 < (double)1.0F; var22 += 0.1) {
  214.          int var6 = var4 + (int)(var10 * var22 * var22 + var12 * var22 + var14);
  215.          int var7 = var5 - (int)(var16 * var22 * var22 + var18 * var22 + var20);
  216.          ((Win32Graphics)this).drawLine(var8, var9, var6, var7);
  217.          var8 = var6;
  218.          var9 = var7;
  219.       }
  220.  
  221.    }
  222.  
  223.    private native byte[] getCharOutline(char var1);
  224.  
  225.    public int drawStringWidth(String var1, int var2, int var3) {
  226.       FontX var4 = this.getFontX(8);
  227.       return var4 == null ? super.drawStringWidth(var1, var2, var3) : super.drawStringWidth(var1, var2, var3);
  228.    }
  229.  
  230.    public void setFont(Font var1) {
  231.       if (this.field_0 != null) {
  232.          this.field_0 = null;
  233.       }
  234.  
  235.       super.setFont(var1);
  236.    }
  237.  
  238.    public void drawBytes(byte[] var1, int var2, int var3, int var4, int var5) {
  239.       FontX var6 = this.getFontX(8);
  240.       if (var6 == null) {
  241.          super.drawBytes(var1, var2, var3, var4, var5);
  242.       } else {
  243.          super.drawBytes(var1, var2, var3, var4, var5);
  244.       }
  245.  
  246.    }
  247.  
  248.    private void drawOutlineChar(int var1, int var2, GlyphOutline var3) {
  249.       int var4 = var3.polygons.length;
  250.  
  251.       for(int var5 = 0; var5 < var4; ++var5) {
  252.          this.drawOutlinePolygon(var1, var2, var3.polygons[var5]);
  253.       }
  254.  
  255.    }
  256.  
  257.    float getGlyphFloat(byte[] var1) {
  258.       int var2 = this.getGlyphInt(var1);
  259.       float var3 = (float)var2 / 65536.0F;
  260.       return var3;
  261.    }
  262.  
  263.    private native void pDrawBezier(int var1, int var2, PointFx var3, OutlineCurve var4, int var5);
  264.  
  265.    public void drawChars(char[] var1, int var2, int var3, int var4, int var5) {
  266.       FontX var6 = this.getFontX(8);
  267.       if (var6 == null) {
  268.          super.drawChars(var1, var2, var3, var4, var5);
  269.       } else {
  270.          this.drawCharsWidth(var1, var2, var3, var4, var5);
  271.       }
  272.  
  273.    }
  274.  
  275.    int getGlyphShort(byte[] var1) {
  276.       int var2 = (var1[this.bPos] & 255) + (var1[this.bPos + 1] & 255) * 256;
  277.       this.bPos += 2;
  278.       return var2;
  279.    }
  280.  
  281.    public GlyphOutline getGlyphOutline(char var1) {
  282.       if (var1 >= 256) {
  283.          return this.getGlyphOutline1(var1);
  284.       } else {
  285.          if (this.field_0 == null) {
  286.             this.field_0 = new GlyphOutline[256];
  287.          }
  288.  
  289.          if (this.field_0[var1] == null) {
  290.             this.field_0[var1] = this.getGlyphOutline1(var1);
  291.          }
  292.  
  293.          return this.field_0[var1];
  294.       }
  295.    }
  296.  
  297.    public int drawCharsWidth(char[] var1, int var2, int var3, int var4, int var5) {
  298.       FontX var6 = this.getFontX(8);
  299.       if (var6 == null) {
  300.          return super.drawCharsWidth(var1, var2, var3, var4, var5);
  301.       } else {
  302.          FontMetrics var8 = ((Graphics)this).getFontMetrics();
  303.          int var9 = var8.getAscent();
  304.  
  305.          for(int var7 = 0; var7 < var3; ++var7) {
  306.             GlyphOutline var10 = this.getGlyphOutline(var1[var2 + var7]);
  307.             if (var10 != null) {
  308.                this.drawOutlineChar(var4, var5 + var9, var10);
  309.             } else {
  310.                super.drawCharsWidth(var1, var2 + var7, 1, var4, var5);
  311.             }
  312.  
  313.             var4 += var8.charWidth(var1[var2 + var7]);
  314.          }
  315.  
  316.          return var4;
  317.       }
  318.    }
  319.  
  320.    public int drawBytesWidth(byte[] var1, int var2, int var3, int var4, int var5) {
  321.       FontX var6 = this.getFontX(8);
  322.       return var6 == null ? this.drawBytesWidth(var1, var2, var3, var4, var5) : this.drawBytesWidth(var1, var2, var3, var4, var5);
  323.    }
  324.  
  325.    int getSizeGlyphPointFx(byte[] var1) {
  326.       return this.getSizeGlyphFloat(var1) * 2;
  327.    }
  328.  
  329.    public GraphicsX(Win32PrintJob var1) {
  330.       super(var1);
  331.    }
  332.  
  333.    public GraphicsX(GraphicsX var1) {
  334.       super(var1);
  335.    }
  336.  
  337.    public GraphicsX(Win32Graphics var1) {
  338.       super(var1);
  339.    }
  340.  
  341.    public GraphicsX(MComponentPeer var1) {
  342.       super(var1);
  343.    }
  344. }
  345.